gcs cors設定

睡睡念

架構從本來的 NFS全部轉到GCS上了,
所以cors也要跟着設定

正文

將下面檔案,存成json

[
    {
      "origin": ["https://tester.abc.com"],
      "method": ["GET","PUT","POST","HEAD","DELETE","PATCH"],
      "responseHeader": ["Content-Type", "DNT","X-CustomHeader","X-LANG,Keep-Alive","User-Agent","X-Requested-With","If-Modified-Since,Cache-Control","X-Api-Key,X-Device-Id","Access-Control-Allow-Origin"],
      "maxAgeSeconds": 3600
    }
]

執行,收工。

gsutil cors set example_cors_file.json gs://example_bucket

但要注意,這個不會馬上生效,感覺要等超過10分鐘以上。

~~補充,origin不能用 * 的萬用符號,之前測了沒有效果 ,
未來會不會改不清楚。 ~~

測試時,可以用* ,直接用 origin:*

查看bucket有沒有設定cors則用

gsutil cors get gs://example_bucket
or
gcloud storage buckets describe gs://example_bucket --format="default(cors_config)"

142-fig.1.jpg

如果要用gcloud/api,請看下面連結

ref. 設定和查看 CORS 組態

Cors的工作原理

當瀏覽器向 Cloud Storage 發出簡單請求時,會發生以下過程:

  1. 瀏覽器將 Origin 標頭新增到請求中。Origin 標頭包含相應資源(該資源在尋求共享 Cloud Storage 儲存桶的資源)的來源,例如 Origin:https://www.example.appspot.com

  2. Cloud Storage 將請求的 HTTP 方法以及 Origin 標頭的值與目標儲存桶的 CORS 組態中的方法來源資訊進行比較,以查看是否存在匹配項。如果存在匹配項,Cloud Storage 將在響應中包含 Access-Control-Allow-Origin 標頭。Access-Control-Allow-Origin 標頭包含初始請求的 Origin 標頭的值。

  3. 瀏覽器接收響應並檢查 Access-Control-Allow-Origin 值是否與原始請求中指定的網域匹配。如果它們匹配,則請求成功。如果它們不匹配,或者響應中不存在 Access-Control-Allow-Origin 標頭,則請求失敗。